import random
import time
import cv2
import ddddocr
from DrissionPage import ChromiumPage

dp = ChromiumPage()


# 使用OpenCV库点击图片获取坐标
def click_img(yzm_xy):
    # 鼠标点击事件的回调函数
    def mouse_callback(event, x, y, flags, param):
        if event == cv2.EVENT_LBUTTONDOWN:
            cv2.circle(img, (x, y), 3, (0, 0, 255), -1)
            print(f'鼠标点击处的坐标为: ({x},{y})')
            yzm_xy.append({'x': x, 'y': y})

    # 点击图片获取坐标
    img = cv2.imread('captcha.png')
    cv2.namedWindow('image')

    cv2.setMouseCallback('image', mouse_callback)  # 设置鼠标点击事件的回调函数
    cv2.imshow('image', img)  # 在窗口中显示图片
    while True:
        cv2.imshow('image', img)  # 在窗口中显示图片
        if cv2.waitKey(1) == 13:  # 按下Enter键退出
            break

    cv2.destroyAllWindows()  # 关闭窗口


dp.get('http://www.ccgp-yunnan.gov.cn/page/procurement/procurementList.html', retry=3, interval=2, timeout=10)
dp.refresh()  # 刷新页面

print(f'>>>> 是否正在加载状态: {dp.states.is_loading}--{dp.states.ready_state}')

dp.wait.ele_displayed('x://a[@data-page="next"]', timeout=10)
dp.ele('x://a[@data-page="next"]').click()
dp.wait(1, 3)

print('要点击的文字: ', dp.ele('x://span[@class="verify-msg"]').text)

img_obj = dp.ele('x://div[@class="verify-img-panel"]/img')

img_obj.save('./', name='captcha.png', rename=False)  # 保存验证码图片, 命名为captcha.png, 不重命名

yzm_xy = list()

"""
有多种获取验证码坐标的方法, 这里使用OpenCV库获取坐标, 并将坐标保存到列表yzm_xy中
1. OpenCV库获取坐标
2. 超级鹰打码平台识别验证码----》 推荐这个, 很快识别率高, 价格也便宜

都是返回坐标对象, 然后点击坐标即可
"""
click_img(yzm_xy)
print('要点击的坐标为:', yzm_xy)
for xy in yzm_xy:
    # 图片的原始大小为310x155, 但是在页面中显示为350x175, 所以要计算点击坐标的比例
    dp.actions.move_to(img_obj, offset_x=int(xy['x'] / 310 * 350), offset_y=int(xy['y'] / 155 * 175),
                       duration=.1).click()
    time.sleep(2)

# 获取数据
for tr in dp.eles('x://tr')[1:]:
    tds = [td.text.strip() for td in tr.eles('x://td')]
    print(tds)
